// AI 服务测试工具
// 在浏览器开发者工具控制台中执行这些函数来测试 AI 服务

// 声明全局类型，扩展 Window 接口
declare global {
  interface Window {
    testAIHealth: () => Promise<boolean>;
    testAIChat: () => Promise<boolean>;
    testSceneGeneration: () => Promise<boolean>;
    testWordDefinition: () => Promise<boolean>;
    runFullAITest: () => Promise<void>;
  }
}

// 导入 AI 服务（需要在控制台中手动执行）
// import { aiService } from './services/aiService';

// 解析 AI 返回的 JSON，处理可能的 Markdown 代码块
function parseAIResponse(content) {
  if (!content) return null;
  
  let jsonContent = content.trim();
  
  // 移除可能的 Markdown 代码块
  if (jsonContent.startsWith('```json') && jsonContent.endsWith('```')) {
    jsonContent = jsonContent.replace(/^```json\s*/, '').replace(/\s*```$/, '');
  } else if (jsonContent.startsWith('```') && jsonContent.endsWith('```')) {
    jsonContent = jsonContent.replace(/^```[a-zA-Z]*\s*/, '').replace(/\s*```$/, '');
  }
  
  try {
    return JSON.parse(jsonContent.trim());
  } catch (error) {
    console.warn('JSON 解析失败，尝试提取 JSON 对象');
    const jsonMatch = jsonContent.match(/\{[\s\S]*\}/);
    if (jsonMatch) {
      try {
        return JSON.parse(jsonMatch[0]);
      } catch (secondError) {
        console.error('提取的 JSON 也无法解析');
      }
    }
    return null;
  }
}

// 获取正确的 API 基础URL
function getAPIBaseURL() {
  // 在开发环境中使用代理地址
  return window.location.hostname === 'localhost' ? '/api/ai' : 'http://8.141.30.224:8000/v1';
}

// 测试健康检查
async function testAIHealth() {
  console.log('🔍 开始测试 AI 服务健康状态...');
  
  try {
    const baseURL = getAPIBaseURL();
    const isHealthy = await fetch(`${baseURL}/models`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json'
      }
    });
    
    console.log('✅ AI 服务连接成功！');
    console.log('响应状态:', isHealthy.status);
    
    if (isHealthy.ok) {
      const models = await isHealthy.json();
      console.log('📋 可用模型:', models);
      return true;
    } else {
      console.log('⚠️ 服务响应异常:', isHealthy.statusText);
      return false;
    }
  } catch (error) {
    console.error('❌ AI 服务连接失败:', error);
    return false;
  }
}

// 测试聊天完成接口
async function testAIChat() {
  console.log('💬 开始测试聊天接口...');
  
  try {
    const baseURL = getAPIBaseURL();
    const response = await fetch(`${baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'deepseek-chat',
        messages: [
          {
            role: 'system',
            content: 'You are a helpful assistant. Respond in JSON format.'
          },
          {
            role: 'user',
            content: 'Please provide a simple JSON response with "status": "ok" and "message": "Hello from DeepSeek"'
          }
        ],
        temperature: 0.7,
        max_tokens: 100
      })
    });

    if (response.ok) {
      const data = await response.json();
      console.log('✅ 聊天接口测试成功！');
      console.log('🤖 AI 响应:', data);
      return data;
    } else {
      console.error('❌ 聊天接口测试失败:', response.status, response.statusText);
      return null;
    }
  } catch (error) {
    console.error('❌ 聊天接口连接失败:', error);
    return null;
  }
}

// 测试场景生成
async function testSceneGeneration() {
  console.log('🎭 开始测试场景生成...');
  
  const testWords = ['cat', 'house', 'book'];
  const prompt = `请为英语学习者创建一个中级难度的日常生活场景，该场景需要自然地包含以下英语单词：${testWords.join(', ')}。

要求：
1. 场景要真实、生动、容易理解
2. 每个单词都要在场景中有明确的上下文
3. 为图像生成提供详细的场景描述
4. 为每个单词指定在图像中的大致位置（百分比坐标）

请以JSON格式返回：
{
  "title": "场景标题",
  "description": "场景的详细中文描述，200字左右",
  "imagePrompt": "用于AI图像生成的英文提示词，详细描述场景的视觉元素",
  "wordContexts": [
    {
      "word": "单词",
      "contextDescription": "该单词在场景中的具体用途和上下文说明",
      "position": {
        "x": 25,
        "y": 30
      }
    }
  ]
}

注意：position的x和y值应该是0-100之间的百分比，表示单词在图像中的大致位置。`;

  try {
    const baseURL = getAPIBaseURL();
    const response = await fetch(`${baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'deepseek-chat',
        messages: [
          {
            role: 'system',
            content: 'You are an English learning assistant. Generate realistic learning scenarios that help users memorize English words in context. Always respond in valid JSON format.'
          },
          {
            role: 'user',
            content: prompt
          }
        ],
        temperature: 0.7,
        max_tokens: 1500
      })
    });

    if (response.ok) {
      const data = await response.json();
      const content = data.choices?.[0]?.message?.content;
      
      console.log('✅ 场景生成测试成功！');
      console.log('🎬 原始响应:', content);
      
      try {
        const sceneData = parseAIResponse(content);
        if (sceneData) {
          console.log('📝 解析后的场景数据:', sceneData);
          return sceneData;
        } else {
          console.warn('⚠️ JSON 解析失败，但获得了响应:', content);
          return content;
        }
      } catch (parseError) {
        console.warn('⚠️ JSON 解析失败，但获得了响应:', content);
        return content;
      }
    } else {
      console.error('❌ 场景生成失败:', response.status, response.statusText);
      return null;
    }
  } catch (error) {
    console.error('❌ 场景生成连接失败:', error);
    return null;
  }
}

// 测试单词定义
async function testWordDefinition() {
  console.log('📚 开始测试单词定义...');
  
  const testWord = 'beautiful';
  const prompt = `请为英语单词 "${testWord}" 提供中文释义、音标、词性和3个例句。以JSON格式返回：{"definition": "中文释义", "pronunciation": "音标", "partOfSpeech": "词性", "examples": ["例句1", "例句2", "例句3"]}`;

  try {
    const baseURL = getAPIBaseURL();
    const response = await fetch(`${baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'deepseek-chat',
        messages: [
          {
            role: 'system',
            content: 'You are an English dictionary assistant. Provide accurate word definitions, pronunciations, and examples. Always respond in valid JSON format.'
          },
          {
            role: 'user',
            content: prompt
          }
        ],
        temperature: 0.3,
        max_tokens: 800
      })
    });

    if (response.ok) {
      const data = await response.json();
      const content = data.choices?.[0]?.message?.content;
      
      console.log('✅ 单词定义测试成功！');
      console.log('📖 原始定义:', content);
      
      try {
        const wordData = parseAIResponse(content);
        if (wordData) {
          console.log('📝 解析后的单词数据:', wordData);
          return wordData;
        } else {
          console.warn('⚠️ JSON 解析失败，但获得了响应:', content);
          return content;
        }
      } catch (parseError) {
        console.warn('⚠️ JSON 解析失败，但获得了响应:', content);
        return content;
      }
    } else {
      console.error('❌ 单词定义获取失败:', response.status, response.statusText);
      return null;
    }
  } catch (error) {
    console.error('❌ 单词定义连接失败:', error);
    return null;
  }
}

// 运行完整测试套件
async function runFullAITest() {
  console.log('🚀 开始完整的 AI 服务测试套件...');
  console.log('==================================================');
  
  // 测试健康检查
  const healthResult = await testAIHealth();
  console.log('');
  
  if (healthResult) {
    // 测试基础聊天
    await testAIChat();
    console.log('');
    
    // 测试场景生成
    await testSceneGeneration();
    console.log('');
    
    // 测试单词定义
    await testWordDefinition();
  } else {
    console.log('❌ 健康检查失败，跳过其他测试');
  }
  
  console.log('');
  console.log('==================================================');
  console.log('✅ 测试套件执行完成！');
}

// 导出测试函数供控制台使用
if (typeof window !== 'undefined') {
  window.testAIHealth = testAIHealth;
  window.testAIChat = testAIChat;
  window.testSceneGeneration = testSceneGeneration;
  window.testWordDefinition = testWordDefinition;
  window.runFullAITest = runFullAITest;
  
  console.log('🔧 AI 测试工具已加载！');
  console.log('可用函数:');
  console.log('  - testAIHealth() - 测试服务健康状态');
  console.log('  - testAIChat() - 测试基础聊天功能');
  console.log('  - testSceneGeneration() - 测试场景生成');
  console.log('  - testWordDefinition() - 测试单词定义');
  console.log('  - runFullAITest() - 运行完整测试套件');
  console.log('');
  console.log('推荐先运行: runFullAITest()');
}

export {
  testAIHealth,
  testAIChat,
  testSceneGeneration,
  testWordDefinition,
  runFullAITest
};
